/* 
 * File:   LUDecomposer.h
 * Author: gustavo
 *
 * Created on July 29, 2012, 4:39 AM
 */

#ifndef LU_INTERFACE_HPP
#define	LU_INTERFACE_HPP


#include "DecomposeInterface.hpp"
#include "../matrix.hpp"

namespace imp {

	namespace math {

		template <typename T> class LUInterface : public DecomposeInterface {
		public: /* Constructors */


		public: /* Public Methods */
			virtual void getLower(Matrix<T>& Lower) = 0;
			virtual void getDiagonal(Matrix<T>& Diagonal) = 0;
			virtual void getUpper(Matrix<T>& Upper) = 0;
			virtual void getPermutation(Matrix<T>& Permutation) = 0;

			virtual bool isSingular() = 0;
			virtual T determinant() = 0;
			virtual Matrix<T> solve(Matrix<T>& B) = 0;

		private:

		};
	}
}

#endif	/* LU_INTERFACE_HPP */

